
 // 封装一个头文件
 // 提供全局函数，进一步优化操作

 #ifndef __LOG__
 #define __LOG__

#include "util.hpp"
#include "level.hpp"
#include "message.hpp"
#include "format.hpp"
#include "sink.hpp"
#include "logger.hpp"
#include "buffer.hpp"
#include "looper.hpp"
#include <unistd.h>
//#include <stdarg.h>

 namespace violet_log
 {
    // 获取指定日志器接口
    logger::ptr get_logger(const std::string& logger_name)
    {
        std::unique_ptr<global_build_logger> b(new global_build_logger());
        b->build();
        return logger_manage::get_instance().get_logger(logger_name);
    }

    // 获取默认日志器
    logger::ptr get_defualt_logger()
    {
        std::unique_ptr<global_build_logger> b(new global_build_logger());
        b->build();
        return logger_manage::get_instance().default_logger();
    }

    // // 使用宏减少用户传入的参数
    // // // ##__VA_ARGS__是一个宏定义，在C语言中用于处理可变参数的宏
    // // 它可以在预处理阶段将不定数量的参数展开成一个参数列表
    // // 具体的使用方式是将宏定义为带有省略号的参数列表，并使用##将参数连接在一起
    // // 这样可以在宏中处理任意数量的参数
    // #define debug(fmt, ...)  debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    // #define info(fmt, ...)   info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    // #define warn(fmt, ...)   warn(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    // #define error(fmt, ...)  error(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    // #define fatal(fmt, ...)  fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__)

    // // 使用默认日志器输出
    // #define DEBUG(fmt, ...)  violet_log::get_defualt_logger()->debug(fmt, ##__VA_ARGS__)
    // #define INFO(fmt, ...)   violet_log::get_defualt_logger()->info(fmt, ##__VA_ARGS__)
    // #define WARN(fmt, ...)   violet_log::get_defualt_logger()->warn(fmt, ##__VA_ARGS__)
    // #define ERROR(fmt, ...)  violet_log::get_defualt_logger()->error(fmt, ##__VA_ARGS__)
    // #define FATAL(fmt, ...)  violet_log::get_defualt_logger()->fatal(fmt, ##__VA_ARGS__)

    // 使用默认日志器输出
    #define DEBUG(fmt, ...)  violet_log::get_defualt_logger()->debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define INFO(fmt, ...)   violet_log::get_defualt_logger()->info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define WARN(fmt, ...)   violet_log::get_defualt_logger()->warn(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define ERROR(fmt, ...)  violet_log::get_defualt_logger()->error(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define FATAL(fmt, ...)  violet_log::get_defualt_logger()->fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
 }

 #endif